This invention relates to the field of computers. More particularly, apparatus and methods are provided for virtualizing an input/output device to allow multiple hosts and functions to share a single port of the device.
Virtualized I/O devices provide considerable value because they allow a high-performance peripheral component to be shared among multiple applications, making it seem as if each application is receiving a separate, dedicated I/O device. From an application's perspective, each virtual device is completely isolated, and the device driver associated with each virtual device is unaware of the existence of any other. By isolating each virtual device's data from all other virtual devices, data privacy and integrity can be assured.
Peripheral Component Interconnect Express (PCIe) is a very widely used, standardized, computer system I/O technology. PCIe includes a virtualization model in which a Function operating on a host provides hardware traffic isolation and protection, as well as a standardized interface. Via this standard interface, system software can configure and manage anything from a monolithic input/output device supporting a single Function to a high-throughput input/output device supporting hundreds of virtual Functions.
Sharing of one physical input/output port among multiple Functions through virtualization, especially among multiple Functions hosted by different hosts, has not been successfully implemented because it presents several challenges. Among those challenges are isolating the hosts and Functions (even in the presence of errors), handling packets destined for multiple Functions (e.g., broadcast packets), supporting different data throughput rates for different hosts, and so on.
Thus, apparatus and methods are needed to simultaneously support multiple hosts and multiple Functions on each host via a single input/output port, without allowing one host or Function to block another host or Function.